/** ***********************************************************************************
* @file         can_par_list.c
* @brief        定义CAN数据配置信息列表 头文件
* @details      主要是用来定义数据传输格式，以及数据接口
* @author       杨小珛
* @date         2021/01/30
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/
#ifndef CAN_PAR_LIST_H
#define CAN_PAR_LIST_H

#include "os_app.h"

#define CAN1_CHANNEL_NO                 ( 0x01 )
#define CAN2_CHANNEL_NO                 ( 0x02 )

#define SYS_CONFIG_CAN_MAX_NUM          ( 2 )
#define SYS_CONFIG_RS232_MAX_NUM        ( 2 )
#define SYS_CONFIG_PORT_MAX_NUM         ( 30 )

#define SYS_CONFIG_UNIT_MAX_NUM         ( 100 )
#define SYS_CONFIG_DTC_MAX_NUM          ( 10 )

#define UNIT_CONTROL_MOD_RECV_CAN       ( 0x11 )
#define UNIT_CONTROL_MOD_RECV_PORT      ( 0x12 )
#define UNIT_CONTROL_MOD_RECV_RS232     ( 0x13 )

#define UNIT_CONTROL_MOD_SEND_CAN       ( 0x21 )
#define UNIT_CONTROL_MOD_SEND_PORT      ( 0x22 )
#define UNIT_CONTROL_MOD_SEND_RS232     ( 0x23 )

#define CAN_DEV_CONFIG_ID               ( 0x01 )    //CAN配置ID，0x01
#define RS232_DEV_CONFIG_ID             ( 0x02 )    // UART配置ID，0x02

#define UNIT_CONTROL_CONFIG_ID          ( 0x03 )    // UINT配置ID，0x03
#define CAN_RECV_CONFIG_ID              ( 0x31 )    // UINT配置ID，0x31
#define CAN_SEND_CONFIG_ID              ( 0x32 )    // UINT配置ID，0x32
#define PORT_INPUT_CONFIG_ID            ( 0x33 )    // PORT配置ID，0x33
#define PORT_OUTPUT_CONFIG_ID           ( 0x34 )    // PORT配置ID，0x34
#define RS232_RECV_CONFIG_ID            ( 0x35 )    // RS232配置ID，0x35
#define RS232_SEND_CONFIG_ID            ( 0x36 )    // RS232配置ID，0x36

#define DTC_CONTROL_CONFIG_ID           ( 0x04 )    // UINT配置ID，0x03    
#define ENTER_COMMAND_CONFIG_ID         ( 0x41 )    // ENTER配置ID，0x41
#define DTC_READ_CONFIG_ID              ( 0x42 )    // DTC读取配置ID，0x41
#define DTC_CLEAR_CONFIG_ID             ( 0x43 )    // DTC清除配置ID，0x41
#define EXIT_COMMAND_CONFIG_ID          ( 0x44 )    // EXIT配置ID，0x44

#define UNIT_CONTROL_CONFIG_INDEX       ( SYS_CONFIG_UNIT_MAX_NUM )
#define UNIT_CONTROL_CONFIG_NUM         ( 5 )

#define DTC_CONTROL_CONFIG_INDEX        ( SYS_CONFIG_DTC_MAX_NUM )
#define DTC_CONTROL_CONFIG_NUM          ( 5 )


#define CAN_CFG_FORMAT_INTEL            0x0
#define CAN_CFG_FORMAT_MOTO_LSB         0x1
#define CAN_CFG_FORMAT_MOTO_MSB         0x2

#define CAN_CFG_FORMAT_DATA             0x1
#define CAN_CFG_FORMAT_STATE            0x2
#define CAN_CFG_FORMAT_STRING           0x3

/*********************系统驱动配置参数类型*************************************/
typedef enum
{
    CAN_DEV = 0x01,
    RS232_DEV,
    PORT_DEV,
}can_config_dev_type_e;

#pragma pack(1)
/****************************************************************************
系统配置表整体数据结构
****************************************************************************/
#define SYS_CONFIG_MAX_LEN       ( 4078  )
#define SYS_CONFIG_VERSION_MAX_LEN ( 10 )

typedef struct
{
    volatile uint8_t             version[SYS_CONFIG_VERSION_MAX_LEN];    // 配置表版本号
    volatile uint32_t            len;       // 配置表数据长度
    volatile uint32_t            crc;       // 配置表数据校验值
    volatile uint8_t             data[SYS_CONFIG_MAX_LEN];  // 配置表信息，按照单字节对齐
} sys_config_list_t;

/********************CAN驱动配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;   // CAN通道号，0：保留，1：CAN1，2：CAN2
    volatile uint8_t            frame;     // CAN数据帧格式，0：保留，1：标准帧（默认），2：扩展帧，3：远程帧
    volatile uint8_t            baudrate;  // CAN波特率，0：保留，1：100Kbps，2：125Kpbs，3：250Kbps，4：500Kbps（默认），5：800Kbps，6：1000Kbps
    volatile uint8_t            mode;      // CAN工作模式，0：保留，1：正常模式（默认），2：静默模式，3：回环模式，4：回环静默模式
    volatile uint8_t            type;      // CAN类型，1：Classic CAN 接收数据长度为8个字节（默认），2：CAN FD 接收数据长度为64个字节
} can_dev_infor_t;

typedef struct
{
    volatile uint8_t            id;         // CAN配置ID，0x01
    volatile uint8_t            index;      // CAN配置表节点序号，有效值0-1   
    can_dev_infor_t             infor;      // CAN驱动配置表信息
} can_dev_config_t;

/********************RS232驱动配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;   // UART通道号，0x00：保留，0x01：RS232;（默认），0x02：RS485;
    volatile uint8_t            baudrate;  // UART波特率，0x00：保留，0x01：9600Kbps，0x02：19200Kbps，0x03：38400Kpbs，0x04：57600Kbps，0x05：115200Kbps（默认）
    volatile uint8_t            datalen;   // UART数据长度，0x00：保留，0x01：5位，0x02：6位，0x03：7位，0x04：8位（默认）
    volatile uint8_t            databit;   // UART停止位长度，0x00：保留，0x01：1位（默认），0x02：1.5位，0x03：2位
    volatile uint8_t            parity;    // UART数据校验，0x01：None（默认），0x02：Odd，0x03：Even，0x04：Mark，0x05：Space FD 接收数据长度为64个字节
} rs232_dev_infor_t;

typedef struct
{
    volatile uint8_t            id;         // UART配置ID，0x02
    volatile uint8_t            index;      // UART配置表节点序号，有效值0-1   
    rs232_dev_infor_t           infor;      // UART驱动配置表信息
} rs232_dev_config_t;

/********************UNIT控制配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            type;        // 单元控制模块选择     
    //(bit0-bit3)，0：保留，1：接收/输入，2：发送/输出
    // (bit4-bit7)，0：保留，1：CAN，2：PORT，3：RS232
    volatile void               *config;     //根据type 选择对应的配置表信息 
    //type = 0x11：can_recv_config_t 
    //type = 0x12：port_input_config_t 
    //type = 0x13：rs232_recv_config_t

    //type = 0x21：can_send_config_t
    //type = 0x22：port_output_config_t
    //type = 0x23：rs232_send_config_t
    volatile uint16_t           time;       //等待时间，有效数据范围0-5000ms。单位ms。建议不小于10ms
} unit_control_format_t;

typedef struct
{
    volatile uint8_t            num;        // UNIT控制模块个数，有效数据范围1-10
    volatile uint8_t            cnt;        // 单元控制模块周期次数，有效数据范围1-200
    volatile uint16_t           period;     // 单元控制模块次数间隔周期，单位ms，
    unit_control_format_t       format[UNIT_CONTROL_CONFIG_NUM];     // UNIT控制数据格式
} unit_control_infor_t;

typedef struct
{    
    volatile uint8_t            id;         // UINT配置ID，0x03
    volatile uint8_t            index;      // UNIT配置表节点序号，有效值0-255
    unit_control_infor_t        infor;      // UNIT驱动配置表信息
} unit_control_config_t;

/********************CAN接收配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    // CAN通道，0：保留，1：CAN1，2：CAN2
    volatile uint32_t           cid;        // CAN数据ID
    volatile uint8_t            type;       // CAN数据类型 
    //（bit0-bit3），0：INTEL，1：MOTO_LSB，2：MOTO_MSB
    //（bit4-bit7），0：保留，1：数据，2：状态
    volatile uint8_t            sbit;       // 开始位，有效数据范围0-63
    volatile uint8_t            blen;       // 信号的位长度，有效数据范围1-64
    volatile uint32_t           resulotion;// 精度度，十六进制值的比例因子是为了计算信号的物理值。
    volatile uint32_t           offset;     // 偏移量用来计算信号的物理值。 
    union                                   
    {
        volatile uint32_t       state;      // CAN状态描述
        struct
        {
            volatile uint32_t   app0   :  4; 
            volatile uint32_t   app1   :  4;
            volatile uint32_t   app2   :  4;
            volatile uint32_t   app3   :  4;
            volatile uint32_t   app4   :  4;
            volatile uint32_t   app5   :  4;
            volatile uint32_t   app6   :  4;
            volatile uint32_t   app7   :  4;
        };
    };
} can_recv_infor_t;

typedef struct
{
    volatile uint8_t            id;         // UINT配置ID，0x31
    can_recv_infor_t            infor;      // UNIT驱动配置表信息
} can_recv_config_t;

/********************CAN发送配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    // CAN通道，0：保留，1：CAN1，2：CAN2
    volatile uint32_t           cid;        // CAN数据ID
    volatile uint8_t            type;       // CAN数据类型，0：INTEL，1：MOTO_LSB，2：MOTO_MSB
    volatile uint8_t            count;      // CAN循环发送的次数，范围1-200，当为0xFF时表示永久发送
    volatile uint16_t           time;       // CAN循环发送的周期，单位ms。有效数据范围10-10000ms
    volatile uint8_t            len;        // CAN发送数据帧内容长度，有效数据范围1-8
    volatile uint8_t            data[8];    // CAN发送帧内容
} can_send_infor_t;

typedef struct
{
    volatile uint8_t            id;         // UINT配置ID，0x32
    can_recv_infor_t            infor;      // UNIT驱动配置表信息
} can_send_config_t;

/********************PORT输入配置表数据结构*************************************/
typedef struct
{
    union                                   
    {
        volatile uint16_t        port;          // PORT端口
        struct
        {
            volatile uint16_t    pin   :  8;    //端口号，有效值：0-15，BCD码
            volatile uint16_t    name  :  4;    //端口名称，0xA、0xB、0xC、0xD、0xE、0xF
            volatile uint16_t    st    :  2;    //状态位模式，0：OUTPUT，1：INPUT，2：ADC，3：INTERRRUPT
            volatile uint16_t    mode  :  2;    //配置模式
            //0：GPIO_MODE_IPD （输入配置，下拉）， EXTI_TRIG_RISING  （中断配置，上升沿）
            //1：GPIO_MODE_IPU （输入配置，上拉）， EXTI_TRIG_FALLING（中断配置，下降沿）
            //2：EXTI_TRIG_BOTH （中断配置，上升、下降）
            //3：保留
        };
    };
    volatile uint8_t            type;       // PORT数据类型，0：保留，1：数据，2：状态
    //volatile uint8_t            count;      // PORT循环输入的次数，范围1-200，当为0xFF时表示永久发送
    //volatile uint16_t           time;       // PORT循环输入的周期，单位ms。有效数据范围10-10000ms
    volatile uint32_t           resulotion;// 精度度，十六进制值的比例因子是为了计算信号的物理值。
    volatile uint32_t           offset;     // 偏移量用来计算信号的物理值。 
    union                                   
    {
        volatile uint32_t       state;      // PORT状态描述
        struct
        {
            volatile uint32_t   app0   :  16; 
            volatile uint32_t   app1   :  16;
        };
    };
} port_input_infor_t;

typedef struct
{
    volatile uint8_t            id;         // PORT配置ID，0x33
    port_input_infor_t          infor;      // PORT驱动配置表信息
} port_input_config_t;

/********************PORT输出配置表数据结构*************************************/
typedef struct
{
    union                                   
    {
        volatile uint16_t        port;          // PORT端口
        struct
        {
            volatile uint16_t    pin   :  8;    //端口号，有效值：0-15，BCD码
            volatile uint16_t    name  :  4;    //端口名称，0xA、0xB、0xC、0xD、0xE、0xF
            volatile uint16_t    st    :  2;    //状态位模式，0：OUTPUT，1：保留，2：保留，3：保留
            volatile uint16_t    mode  :  2;    //配置模式
            //0：GPIO_MODE_OUT_OD （输出配置，开漏），（配置输出时，初始化状态为高电平）
            //1：GPIO_MODE_OUT_PP（输出配置，推完），（配置输出时，初始化状态为高电平）
            //2：GPIO_MODE_OUT_OD （输出配置，开漏），（配置输出时，初始化状态为低电平）
            //3：GPIO_MODE_OUT_PP（输出配置，推完），（配置输出时，初始化状态为低电平）
        };
    };
    volatile uint8_t            out;        // PORT控制类型，0：保留，1:低电平控制，2:高电平控制，3:脉冲信号控制
    volatile uint8_t            count;      // PORT循环发送的次数，范围1-200，当为0xFF时表示永久发送
    volatile uint16_t           time;       // PORT循环发送的周期，单位ms。有效数据范围10-10000ms
} port_output_infor_t;

typedef struct
{
    volatile uint8_t            id;         // PORT配置ID，0x34
    port_output_infor_t         infor;      //PORT驱动配置表信息
} port_output_config_t;

/********************RS232接收配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            len;        // RS232接收的数据长度，有效数据范围1-200。
    volatile uint8_t            data[200];  // 接收的数据内容，关键性信息。需要过滤的数据默认为0x00
} rs232_recv_infor_t;


typedef struct
{
    volatile uint8_t            id;         // RS232配置ID，0x35
    rs232_recv_infor_t          infor;      // RS232信息配置表信息
} rs232_recv_config_t;

/********************RS232发送配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            count;      // 发送次数，数据范围1-200，0xFF时表示永久发送
    volatile uint16_t           time;       // 发送周期时间，单位ms。建议不小于10ms
    volatile uint8_t            len;        // 发送的数据长度，有效数据范围1-200。
    volatile uint8_t            data[200];  // 发送的数据内容
} rs232_send_infor_t;

typedef struct
{
    volatile uint8_t            id;         // RS232配置ID，0x36
    rs232_send_infor_t          infor;      // RS232信息配置表信息
} rs232_send_config_t;

/********************DTC控制配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            type;        // 单元控制模块选择，0:保留，1：ENTER，2：DTC READ。3：DTC CLEAR，4：EXIT
    volatile void               *config;     //根据type 选择对应的配置表信息 
    //type = 0x01：enter_command_config_t
    //type = 0x02：dtc_read_config_t
    //type = 0x03：dtc_clear_config_t
    //type = 0x04：exit_command_config_t
    volatile uint16_t           time;       //等待时间，有效数据范围0-5000ms。单位ms。建议不小于10ms
} dtc_control_format_t;

typedef struct
{
    volatile uint8_t            num;        // UNIT控制模块个数，有效数据范围1-10
    dtc_control_format_t        format[DTC_CONTROL_CONFIG_NUM];// UNIT控制数据格式
} dtc_control_infor_t;

typedef struct
{
    volatile uint8_t            id;         // UINT配置ID，0x03
    volatile uint8_t            index;      // UNIT配置表节点序号，有效值0-255    dtc_control_infor_t         infor;      // UNIT驱动配置表信息
    dtc_control_infor_t         *infor;
} dtc_control_config_t;

/********************ENTER命令配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    // 发送次数，数据范围1-200，0xFF时表示永久发送
    volatile uint32_t           cid;        // CAN数据ID
    volatile uint8_t            type;       // CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            len;        // 发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            data[8];    // 发送帧内容
    volatile uint32_t           acid;       // 应答CAN数据ID
    volatile uint8_t            atype;      // 应答CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            alen;       // 应答发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            adata[8];   // 应答发送帧内容
} enter_command_infor_t;

typedef struct
{
    volatile uint8_t            id;         // ENTER配置ID，0x41
    enter_command_infor_t       infor;      // ENTER命令配置表信息
} enter_command_config_t;

/********************DTC读取配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    //CAN通道，0：保留，1：CAN1，2：CAN2
    volatile uint32_t           cid;        //CAN数据ID
    volatile uint8_t            type;       //CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            len;        //发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            data[8];    //发送帧内容
    volatile uint8_t            acid;       //应答CAN数据ID
    volatile uint8_t            atype;      //应答CAN数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            alen;       //应答CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            adata[8];   //应答帧内容
} dtc_config_format_t;

typedef struct
{
    volatile uint8_t            ftype;      //DTC配置类型：0：保留，1：CAN_SAE1939，2：CAN_ISO14230_F，3：CAN_ISO14230_S
    volatile uint8_t            flen;       //单组故障码长度，有效数据范围1-200。
    dtc_config_format_t         format;    //DTC 故障码数据信息
} dtc_read_infor_t;

typedef struct
{
    volatile uint8_t            id;         // DTC读取配置ID，0x41
    dtc_read_infor_t            infor;      // DTC读取配置表信息
} dtc_read_config_t;

/********************DTC清除配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    //CAN通道，0：保留，1：CAN1，2：CAN2
    volatile uint32_t           cid;        //CAN数据ID
    volatile uint8_t            type;       //CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            len;        //发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            data[8];    //发送帧内容
    volatile uint8_t            acid;       //应答CAN数据ID
    volatile uint8_t            atype;      //应答CAN数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            alen;       //应答CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            adata[8];   //应答帧内容
} dtc_clear_infor_t;

typedef struct
{
    volatile uint8_t            id;         // DTC清除配置ID，0x41
    dtc_clear_infor_t           infor;      // DTC清除配置表信息
} dtc_clear_config_t;

/********************EXIT命令配置表数据结构*************************************/
typedef struct
{
    volatile uint8_t            channel;    // 发送次数，数据范围1-200，0xFF时表示永久发送
    volatile uint32_t           cid;        // CAN数据ID
    volatile uint8_t            type;       // CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            len;        // 发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            data[8];    // 发送帧内容
    volatile uint32_t           acid;       // 应答CAN数据ID
    volatile uint8_t            atype;      // 应答CAN发送数据类型，0：保留，1：标准帧，2：扩展帧，3：远程帧
    volatile uint8_t            alen;       // 应答发送CAN数据帧内容长度，有效数据范围1-8
    volatile uint8_t            adata[8];   // 应答发送帧内容
} exit_command_infor_t;

typedef struct
{
    volatile uint8_t            id;         // EXIT配置ID，0x44
    exit_command_infor_t        infor;      // EXIT命令配置表信息
} exit_command_config_t;

#pragma pack()

/****************************************************************************
系统配置参数表，节点映射表数据格式；
****************************************************************************/
typedef struct
{
    volatile uint8_t            dcan_num;                            // CAN驱动配置表数量
    can_dev_infor_t             dcan[SYS_CONFIG_CAN_MAX_NUM];        // CAN驱动配置信息
    volatile uint8_t            d232_num;                            // 232驱动配置表数量
    rs232_dev_infor_t           d232[SYS_CONFIG_RS232_MAX_NUM];      // 232驱动配置信息
    volatile uint8_t            punit_num;                           // UNIT参数配置表数量
    unit_control_infor_t        punit[SYS_CONFIG_UNIT_MAX_NUM];      // UNIT参数配置信息
    volatile uint8_t            pdtc_num;                            // UNIT参数配置表数量
    dtc_control_infor_t         ptdc[SYS_CONFIG_DTC_MAX_NUM];        // UNIT参数配置信息
} can_config_index_map_t;

/****************************************************************************
配置表中数据分类整理数据结构
****************************************************************************/
#define CAN_RECV_DATA_MAP_LEN   ( 100 )

typedef struct
{ 
    volatile uint32_t           cid;
    volatile uint8_t            data[8];                     // CAN接收数据 
} can_recv_data_infor_t;

typedef struct
{   
    volatile uint8_t            num;                        // CAN接收数据的个数
    can_recv_data_infor_t       map[CAN_RECV_DATA_MAP_LEN]; // CAN接收数据帧内容指针
} can_recv_data_map_t;

/****************************************************************************
配置表中数据分类整理数据结构
****************************************************************************/

/****************************MCU 配置表故障信息*********************************/
typedef enum
{   
    MCU_CFG_SUC = 0,                 /*配置信息成功*/
    MCU_CFG_CRC_ERR,                 /*配置信息CRC校验失败*/
    PORT_CFG_LEN_ERR,                /*配置信息长度校验失败*/            
    PORT_CFG_FLASH_ERR,              /*配置信息FLSH存储失败*/    
    PORT_CFG_TASK_ERR,               /*强制停止任务失败*/  
    PORT_CFG_CFG_ERR,                /*配置信息数据错误，具体位置查看index 与 id信息*/ 
    PORT_CFG_UNKNOW_ERR,             /*配置信息未知错误*/      
}mcu_config_error_code_e;

typedef struct
{
    union                                   
    {
        volatile uint32_t        faule;          // 故障信息
        struct
        {   
            volatile uint32_t    err    :  8;    // 错误码 
            volatile uint32_t    index  :  8;    // 节点
            volatile uint32_t    cfg    :  8;    // 配置ID
            volatile uint32_t    id     :  8;    // 配置ID
        };
    };
} mcu_config_fault_infor_t;

/** ****************************************************************************
* @remarks       void can_config_par_list_init( void )
* @brief         CAN 参数配置表初始化
* @param[in]     无
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void can_config_par_list_init( void );

/** ****************************************************************************
* @remarks       uint32_t can_config_index_map_init( uint8_t *par , uint16_t len )
* @brief         CAN 参数配置映射表初始化
* @param[in]     *par 参数源地址，size 参数长度
* @param[out]    无
* @return        pdPASS 成功，pdFAIL失败
* @attention     无
*******************************************************************************/
extern uint32_t can_config_index_map_init( uint8_t *par , uint16_t size );

/** ****************************************************************************
* @remarks       uint32_t can_config_dev_infor_get( uint8_t channel , uint32_t canid )
* @brief         获取CAN配置表驱动
* @param[in]     dev 获取驱动的类型
* @param[out]    *data 数据目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t can_config_dev_infor_get( can_config_dev_type_e dev , uint8_t *data );

/** ****************************************************************************
* @remarks       uint32_t can_config_id_infor_get( uint8_t channel , uint32_t canid )
* @brief         CAN配置表ID 获取
* @param[in]     channel 通道 1 CAN1 2 CAN2
* @param[out]    *canid 数据目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t can_config_id_infor_get( uint8_t channel , uint32_t *canid );

/** ****************************************************************************
* @remarks       uint32_t can_config_data_infor_set( uint8_t channel , uint32_t canid )
* @brief         CAN配置表数据设置
* @param[in]     channel 通道 1 CAN1 2 CAN2 ，canid ，len 数据长度，*data数据源地址
* @param[out]    无
* @return        pdPASS 成功，pdFAIL失败
* @attention     无
*******************************************************************************/
extern uint32_t can_config_data_infor_set( uint8_t channel , uint32_t canid ,uint8_t len, uint8_t *data );

/** ****************************************************************************
* @remarks       uint32_t can_config_data_infor_set( uint8_t channel , uint32_t canid )
* @brief         CAN配置表数据设置
* @param[in]     channel 通道 1 CAN1 2 CAN2 ，canid ，len 数据长度，*data数据源地址
* @param[out]    无
* @return        pdPASS 成功，pdFAIL失败
* @attention     无
*******************************************************************************/
extern uint32_t can_config_data_infor_set( uint8_t channel , uint32_t canid ,uint8_t len, uint8_t *data );

/** ****************************************************************************
* @remarks       uint32_t can_config_data_infor_get(uint8_t channel, uint8_t index, uint8_t num, uint32_t *cid, uint8_t *data )
* @brief         CAN配置表数据设置
* @param[in]     channel 通道，index 节点，num 数量，cid 返回CAN ID
* @param[out]    *data 返回CAN 数据
* @return        pdPASS 成功，pdFAIL失败
* @attention     无
*******************************************************************************/
extern uint32_t can_config_data_infor_get(uint8_t channel,uint32_t cid,uint8_t index, uint8_t num, uint8_t *data );

/** ****************************************************************************
* @remarks       uint32_t can_config_index_format_num_get( uint8_t index )
* @brief         获取CAN UNIT 配置表项目配置数量
* @param[in]     index 项目节点
* @param[out]    无
* @return        获取数据num 数量
* @attention     无
*******************************************************************************/
extern uint32_t can_config_index_format_num_get( uint8_t index );

/** ****************************************************************************
* @remarks       uint32_t can_config_index_format_get( uint8_t index ,unit_control_infor_t *format )
* @brief         获取CAN UNIT 配置表项目数据
* @param[in]     index 项目节点
* @param[out]   *format 数据源地址
* @return        获取数据num 数量
* @attention     无
*******************************************************************************/
extern uint32_t can_config_index_format_get( uint8_t index ,unit_control_infor_t *format );

/** ****************************************************************************
* @remarks       uint32_t can_config_read_can_signal( can_recv_infor_t *signal,uint8_t *sst, uint8_t *buf, uint8_t *out )
* @brief         读取CAN CFG 单项CAN 信号数值
* @param[in]     *signal CAN 信号配置，*sst数据状态，*buf CAN 数据源地址，长度8个字节。
* @param[out]    *out 数据输出目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t can_config_read_can_signal( can_recv_infor_t *signal,uint8_t *sst, uint8_t *buf, uint8_t *out );

/** ****************************************************************************
* @remarks       uint32_t can_config_read_port_signal( port_input_infor_t *signal,uint8_t *sst, uint16_t data, uint8_t *out )
* @brief         读取PORT CFG 单项信号数值
* @param[in]     *signal PORT信号配置，*sst数据状态，data 数据
* @param[out]    *out 数据输出目标地址
* @return        数据长度
* @attention     无
*******************************************************************************/
extern uint32_t can_config_read_port_signal( port_input_infor_t *signal,uint8_t *sst, uint16_t data, uint8_t *out );


#endif


